L19: Přenos a synchronizace souborů

linux.edumach.cz



1. Přenos

1.1. Příkaz wget

Příkaz wget je konzolový nástroj na stahování obsahu webu nebo ftp. Umí především rekurzivně sledovat odkazy. Základní použití je opravdu jednoduché. Příkazem

$ wget <URL>

stáhneme příslušný soubor do aktuálního adresáře.

Pojďme se podívat na nejzajímavější volby:

Další spoustu užitečných parametrů najdete v manuálové stránce nebo v rozsáhlé dokumentaci www.gnu.org/software/wget/manual/wget.html.

1.1.1. Několik příkladů použití

$ wget https://www.edumach.cz/files/alice.txt 

Stáhne textový soubor.

$ cd ~/www 
$ wget -k -p www.n.

Stáhne úvodní stránku včetně obrázků a stylů (volba -p). V aktuálním adresáři vznikne adresář www.n. a v něm soubor index.html a dále všechen potřebný obsah pro správné zobrazení stránky. Parametr -k slouží k přepsání linků ve staženém HTML dokumentu na lokálně stažený obsah. Toto je nutné např. v případě, že na stránce byla použita absolutní URL. Všimněte si, že při neuvedení protokolu v URL se předpokládá HTTP/HTTPS, a není-li z URL zřejmý název souboru, použije se index.html (i když v tomto konkrétním případě se ve skutečnosti jedná o soubor index.php).

Stáhne textov soubor.

https://tux.panska.cz/~10XPrijmeniJ/www.gnu.org/

1.2. Příkaz scp

V běžné praxi se poměrně často setkáváme s potřebou nahrávat větší či menší počet souborů na nějaký vzdálený počítač. Existuje několik okenních aplikací jako WinSCP, Cyberduck, FileZilla apod. Ty používají protokol SFTP (SSH file transfer protocol). Jde to i bez nich, a to pomocí protokolu SCP (Secure Copy). K tomu slouží příkaz scp (OpenSSH secure file copy). Základní syntaxe příkazu je:

scp [volby] source target

Základní použití:

$ scp test.txt 10XPrijmeniJ@217.195.162.12:/home/10XPrijmeniJ

Toto je aAsi nejjednodušší příklad. V tomto případě se zkopíruje soubor test.txt z aktuálního adresáře na lokálním disku na vzdálený počítač s IP adresou 217.195.162.12 pod uživatelským účtem 10XPrijmeniJ do adresáře /home/10XPrijmeniJ. Namísto adresy IP můžeme použít i doménové jméno cílového počítače (v tomto případě tux.panska.cz).

Před samotným kopírováním souboru budeme dotázání na heslo k účtu 10XPrijmeniJ na vzdáleném stroji (pokud nemáme aktivní ssh klíče).

Funguje i kopírování opačným směrem:

$ scp 10XPrijmeniJ@217.195.162.12:/home/10XPrijmeniJ/test.txt ~

Výše uvedený příklad je přesným opakem toho prvního. Ze serveru 217.195.162.12 a adresáře /home/10XPRijmeniJ zkopírujeme soubor test.txt do našeho home adresáře na disku ~. Před samotným kopírováním souboru budeme opět dotázání na heslo k účtu 10XPrijmeniJ na vzdáleném stroji.

Další příklady použití:

$ scp * pepa@192.168.1.200:/home/pepa

Důkaz toho, že SCP umí kopírovat více souborů za sebou. SCP zkopíruje všechny soubory v aktuálním adresáři (*) na server 192.168.1.200 do adresáře /home/pepa.

$ scp -r pokus pepa@192.168.1.200:/home/pepa

Tento příkaz zkopíruje adresář pokus včetně všech jejích podadresářů na server 192.168.1.200 do adresáře /home/pepa.

$ scp pepa@192.168.1.200:/home/pepa/temp/test.txt pepa@192.168.1.200:/home/pepa

Zřejmě nejzajímavější příklad použití. Data jsou kopírována vzdáleně pouze mezi servery. Pozor -- je důležité zajistit vzájemnou autentizaci mezi prvním a druhým severem (ssh klíč).

1.3. Midnight Commander

I Midnight Commander disponuje funkcí, která umožní připojit se na vzdálený server a jeho adresářovou strukturu zobrazit v panelu. To vám umožní provádět běžné operace se soubory a adresáři: kopírování, přesun, mazání, editaci

1.3.1. Připojení k serveru

Toto je pouze ukázka. Chybí nám druhý server 😦

Příkazem mc spusťte Midnight Commander. Klávesou F9 rozbalte horní menu. V levém (nebo pravém) panelu zvolte položku SFTP link a zadejte jméno, adresu a výchozí adresář ve tvaru sftp://jmeno@server:/:

sftp://10XPrijmeniJ@tux.panska.cz:/

Po zadání svého hesla jste připojeni. Příklad pro TuXe:

Ukončení spojení provedete prostým "vyskákáním" do rootovského adresáře (opakovaným Home+Enter).

TIP: Ve druhém panelu se můžete připojit k dalšímu serveru a kopírovat, přesouvat... soubory mezi nimi. Skvělé, že?

1.4. WinSCP

WinSCP je dvou-panelový správce souborů pro Windows. Umí se připojit ke vzdálenému serveru, přenášet soubory oběma směry a běžnou práci se soubory: vytvoření, smazání (BEZ KOŠE!), přejmenování, přesun, editování…

1.4.1. Připojení k serveru

Po kliknutí na Nové místo vyberte typ SFTP (port nechte na 22), zadejte název serveru (tux.panska.cz) své uživatelské jméno ve tvaru 10XPrijmeniJ (dbejte na velikost znaků) a své školní heslo a klepněte na Uložit (můžete zakliknout uložení hesla). Pak klepněte na Přihlásit.

První přihlášení bude vyžadovat odsouhlasení výměny šifrovacích klíčů.

1.5. Cyberduck

Cyberduck je klient s otevřeným zdrojovým kódem (licencí GNU GPL) pro mnoho protokolů, který je k dispozici pro macOS a Windows.

1.5.1. Připojení k serveru

Klepněte na ikonu Záložky a poté dole na ikonu +. Vyberte protokol SFTP (port nechte na 22), zadejte název serveru (tux.panska.cz) své uživatelské jméno ve tvaru 10XPrijmeniJ (dbejte na velikost znaků) a své školní heslo. Volitelně můžete změnit název přezdívky a visačky. Poklepáním na záložku se připojte.

2. Synchronizace

Nejdůležitější a většinou nejproblematičtější bývá volba zálohovacího programu. V Linuxu existuje nespočet nástrojů, které lze pro zálohu dat použít.

Zálohy obecně rozdělujeme do několika skupin.

Typ Význam
Úplná Ukládá přesné kopie všech dat
Rozdílová tzv. "diferenciální" záloha. U této se ukládají pouze ty soubory (nebo jen části souborů), které se změnily od poslední úplné zálohy. Datově a časově nejúspornější způsob.
Přírůstková tzv. "inkrementální" záloha. U tohoto typu je ukládána kopie jen těch souborů, které se změnily od poslední, ať již úplné, nebo inkrementální, zálohy.

2.1. Příkaz rsync

Rsync slouží k zálohování (i inkrementálnímu) celých stromových struktur disku, a to i po síti. Existuje pro něj spousta nástaveb většinou ve formě různých skriptů.

Jestliže máme rsync nainstalovaný a chceme si ho otestovat, založíme si na svém disku v adresáři /tmp dva adresáře. První nazveme abc a druhý xyz. Našim úkolem bude přenést zálohu adresáře abc do adresáře xyz. Abychom měli co přenášet, vytvoříme si ještě v adresáři abc příkazem touch /tmp/abc/test soubor test.

Syntaxe programu rsync je shodná s většinou linuxových příkazů. Jako první zadáváme patřičný parametr, následně adresář, který chceme zálohovat a dále pak adresář, do kterého bude záloha uložena. Nejjednodušší příkaz by pak mohl vypadat kupříkladu takto:

$ rsync -av /tmp/abc/ /tmp/xyz/

Pakliže jej spustíme, rsync zkopíruje všechny soubory z adresáře abc do adresáře xyz. Parametr -av značí, že bude provedena „ukecaná“ rekurzívní záloha se zachováním patřičných symlinků, práv, časů, skupin vlastníků a zařízení.

Výše uvedený příklad je plně funkční, ovšem někdy potřebujeme přenášet soubory po síti a ne jen v rámci jednoho počítače. Pro tyto případy je rsync vybaven přepínačem -e, za který doplníme název shellu, přes který budeme ke stanici přistupovat. S protokolem SSH, vzdáleným počítačem pepa.net a s uživatelem tester by příkaz vypadal následovně:

$ rsync -av -e ssh /tmp/abc/ tester@pepa.net:/tmp/xyz/

Automatizovaná vzdálená synchronizace:

$ rsync --rsh="sshpass -p HESLO ssh -l jmeno" example.com:/var/ /backup/

Předtím je nutné provést výměnu klíčů.

Důležité přepínače:

POZOR na význam lomítka na konci cesty!